"""
装载组件逻辑

提供组件动态加载功能，包括：
- 自动扫描widgets目录
- 动态导入组件模块
- 注册组件API路由
- 注册组件数据模型
"""

import os
import importlib
from pathlib import Path

# 存储加载的组件API和模型
apis = []
models = []

def _load_widget():
    """
    装载组件
    
    自动扫描widgets目录，动态加载所有组件模块：
    - 查找所有子目录（除了__开头的）
    - 动态导入每个组件模块
    - 注册组件的API路由
    - 注册组件的数据模型
    """
    # 获取 widgets 目录路径
    widgets_dir = Path(__file__).parent
    
    if not widgets_dir.exists():
        print(f"组件目录不存在: {widgets_dir}")
        return
    
    # 遍历 widgets 目录下的所有组件
    for widget_dir in widgets_dir.iterdir():
        if widget_dir.is_dir() and not widget_dir.name.startswith("__"):
            try:
                # 动态导入组件
                module_name = f"widgets.{widget_dir.name}"
                module = importlib.import_module(module_name)
                
                # 检查是否有 router
                if hasattr(module, "router"):
                    apis.append(module.router)
                    print(f"已加载组件: {widget_dir.name}")
                
                # 检查是否有 models
                if hasattr(module, "models"):
                    models.extend(module.models)
                    print(f"已加载模型: {widget_dir.name}")
                    
            except ImportError as e:
                print(f"加载组件 {widget_dir.name} 失败: {e}")
            except Exception as e:
                print(f"处理组件 {widget_dir.name} 时出错: {e}")

# 自动加载组件
_load_widget()

# 导出加载的组件
__all__ = ["apis", "models", "_load_widget"]
